#include "Entidad.h"

Entidad::Entidad(void)
{
 mSceneMgr = NULL;
 mEntidad  = NULL;
 mScnNodo  = NULL;
 mVelocidad = 0;
 mTerreno = NULL;
}

Entidad::~Entidad(void)
{
}

void  Entidad::Init(SceneManager* sceneManager, String nombre, String modelo, TerrainDecal* terreno)
{
        Inicializar (sceneManager, nombre,  modelo, terreno);
}

void Entidad::Inicializar(SceneManager* sceneManager,String nombre, String modelo, TerrainDecal* terreno)
{
        mSceneMgr  = sceneManager;
        mTerreno  = terreno;

        mEntidad = mSceneMgr->createEntity(nombre, modelo);
        mEntidad->setQueryFlags(0xFFFFFFFF);

		mScnNodo = mSceneMgr->getRootSceneNode()->createChildSceneNode();
        mScnNodo->attachObject(mEntidad);
}

Vector3 Entidad::getScale(void) 
{ 
	return mScnNodo->getScale(); 
}

Entity* Entidad::getEntidad(void) 
{ 
	return mEntidad;
}

Vector3 Entidad::getPosition(void) 
{ 
	return mScnNodo->getPosition(); 
}

Quaternion Entidad::getOrientation(void) 
{ 
	return mScnNodo ->getOrientation(); 
}

float Entidad::getVelocidad() 
{
	return mVelocidad; 
}

Real Entidad::getHeight(void)
{
        AxisAlignedBox boundingBox = mEntidad->getBoundingBox();
        return (boundingBox.getMaximum().y - boundingBox.getMinimum().y);
}

void Entidad::setPosition(Vector3 posicion)
{
        if(posicion.y < 0) posicion.y = 0;
		mScnNodo->setPosition(
                posicion.x,
				mTerreno->getHeightAt(posicion) + posicion.y,
                posicion.z
        );
}
void Entidad::setPosition(Real x, Real y, Real z)
{ 
	setPosition(Vector3(x, y, z)); 
}

void Entidad::setMaterialName(String name)
{ 
	mEntidad->setMaterialName(name);
}

void Entidad::setTranslate(Real x, Real y, Real z)
{ 
	mScnNodo->translate(x,y,z);
}

void Entidad::setOrientation(Quaternion orientacion) 
{
	mScnNodo->setOrientation(orientacion); 
}
//
//void Entidad::setOrientation(Real w, Real x, Real y, Real z)
//{
//	m_sceneNode->setOrientation(w, x, y, z); 
//}

void Entidad::setScale(Vector3 scale) 
{
	mScnNodo->setScale(scale); 
}

//void MM_Entity::setScale(Real sx, Real sy, Real sz) { m_sceneNode->setScale(sx, sy, sz); }
void Entidad::setVelocidad(float speed) 
{ 
	mVelocidad  = speed; 
}

